package cn.zyq.ykb.service.user;

import cn.zyq.ykb.beans.task.MyTask;
import cn.zyq.ykb.beans.task.vo.UserCountVo;
import cn.zyq.ykb.beans.user.User;
import cn.zyq.ykb.beans.user.UserPromotion;
import cn.zyq.ykb.beans.user.bo.SwitchVersionBo;
import cn.zyq.ykb.system.common.PageParam;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 用户-推广Service接口
 *
 * @author SystemAuth
 * @date 2023-05-23
 */
public interface UserPromotionService {
    /**
     * 查询用户-推广
     *
     * @param userPromotionID 用户-推广主键
     * @return 用户-推广
     */
    UserPromotion selectUserPromotionByUserPromotionID(Integer userPromotionID);

    /**
     * 查询用户-推广
     *
     * @param serviceID 用户-推广业务ID
     * @return 用户-推广
     */
    UserPromotion selectUserPromotionByServiceID(String serviceID);

    /**
     * 查询用户-推广列表
     *
     * @param pageParam
     * @return 用户-推广集合
     */
    PageInfo<UserPromotion> selectUserPromotionList(PageParam pageParam, User user);

    /**
     * 查询用户-推广列表
     *
     * @param pageParam
     * @return 用户-推广集合
     */
    PageInfo<UserPromotion> selectUserPromotionList(PageParam pageParam);

    /**
     * 查询用户-推广列表
     *
     * @param param
     * @return 用户-推广集合
     */
    List<UserPromotion> selectUserPromotionList(UserPromotion param);

    /**
     * 新增用户-推广
     *
     * @param param 用户-推广
     * @return 结果
     */
    int insertUserPromotion(UserPromotion param);

    /**
     * 修改用户-推广
     *
     * @param param 用户-推广
     * @return 结果
     */
    int updateUserPromotion(UserPromotion param);

    /**
     * 批量删除用户-推广
     *
     * @param userPromotionIDs 需要删除的用户-推广主键集合
     * @return 结果
     */
    int deleteUserPromotionByUserPromotionIDs(Integer[] userPromotionIDs);

    /**
     * 删除用户-推广信息
     *
     * @param userPromotionID 用户-推广主键
     * @return 结果
     */
    int deleteUserPromotionByUserPromotionID(Integer userPromotionID);

    /**
     * 钻石版切换成线上版本
     *
     * @param bo
     * @param loginUser
     * @return
     */
    int switchVersion(SwitchVersionBo bo, User loginUser);

    /**
     * 推广任务列表
     * @param pageParam
     * @param loginUser
     * @return
     */
    List<MyTask> taskList(PageParam pageParam, User loginUser);

    UserCountVo getCount(User loginUser, String createTime, Integer type);

    UserCountVo getSum(Integer promotionType,Integer type,User loginUser);
}
